const github = {
  state: {
    users: [],
    isLoading: false,
  }, // initial state
  reducers: {
    requestUsers(state) {
      return {
        users: [],
        isLoading: true,
      };
    },
    receiveUsers(state, payload) {
      return {
        isLoading: false,
        users: payload,
      };
    },
  },
  effects: {
    // handle state changes with impure functions.
    // use async/await for async actions
    async fetchUsers() {
      try {
        this.requestUsers();
        const response = await fetch("https://api.github.com/users");
        const users = await response.json();
        this.receiveUsers(users);
        return users;
      } catch (err) {
        console.log(err);
        this.receiveUsers([]);
      }
    },
  },
};

export default github;
